package com.keyue.service.admin;

import com.baomidou.mybatisplus.extension.service.IService;
import com.keyue.common.constant.ServerResult;
import com.keyue.domain.RoleEnum;
import com.keyue.domain.dto.admin.AdminUserDO;
import com.keyue.domain.vo.UserVO;
import com.keyue.domain.vo.admin.*;

/**
 * 用户表(AdminUser)表服务接口
 *
 * @author makejava
 * @since 2023-08-30 17:51:48
 */
public interface AdminUserService extends IService<AdminUserDO> {

    /**
     * 通过ID查询单条数据
     *
     * @param adminUserQueryVO 主键
     * @return 实例对象
     */
    ServerResult queryById(AdminUserQueryVO adminUserQueryVO);

    /**
     * 分页查询
     *
     * @param adminUserQueryVO 筛选条件
     * @return 查询结果
     */
    ServerResult list(AdminUserQueryVO adminUserQueryVO);

    /**
     * 新增数据
     *
     * @param adminUserVO 数据VO
     * @return 新增结果
     */
    ServerResult add(AdminUserVO adminUserVO);

    /**
     * @param adminUserVO
     * @return
     */
    ServerResult authRole(AdminAuthUserVO adminUserVO);

    /**
     * 修改数据
     *
     * @param adminUserVO 数据VO
     * @return 编辑结果
     */
    ServerResult edit(AdminUserVO adminUserVO);

    /**
     * 通过主键删除数据
     *
     * @param adminUserQueryVO 筛选条件
     * @return 是否成功
     */
    ServerResult deleteById(AdminUserQueryVO adminUserQueryVO);

    /**
     *
     * @param adminUserQueryVO
     * @return
     */
    ServerResult opt(AdminUserQueryVO adminUserQueryVO);

    /**
     *
     * @param userName
     * @return
     */
    ServerResult<AdminResultVO> isAdmin(String userName);

    /**
     *
     * @param userName
     * @return
     */
    ServerResult<RoleEnum> getRoleBy(String userName);

    /**
     * 修改密码
     *
     * @param pwdVO
     * @return
     */
    ServerResult updatePass(UpdatePwdVO pwdVO);

    /**
     *
     * @param resetPwdVO
     * @return
     */
    ServerResult resetPwdVO(ResetPwdVO resetPwdVO);

    /**
     * 用户名称/手机号/邮箱号
     *
     * @param userName
     * @return
     */
    UserVO findByUserName(String userName);


    /**
     * @param registerVO
     * @return
     */
    ServerResult phoneRegister(AdminUserRegisterVO registerVO);

    /**
     * @param loginByPhoneVO
     * @return
     */
    ServerResult loginByPhone(AdminUserLoginByPhoneVO loginByPhoneVO);

    /**
     * @param loginByPwdVO
     * @return
     */
    ServerResult loginByPwd(AdminUserLoginByPwdVO loginByPwdVO);

    /**
     * @param modifyPwdVO
     * @return
     */
    ServerResult passwordModify(AdminUserModifyPwdVO modifyPwdVO);

    /**
     * @param recoverEmailVO
     * @return
     */
    ServerResult sendPasswordRecoverMail(AdminUserPasswordRecoverEmailVO recoverEmailVO);

    /**
     * @param username
     * @return
     */
    MemberUserVO findByNameOrPhone(String username);


}
